<?php
/**
 * AddIdeaForm.php
 * @author Winbeek <winbeek@gmail.com>
 * @since 28 July 2012
 * @version $Id: AddIdeaForm.php 27 2012-07-28 17:49:19Z winbeek $
 */

use Nette\Application\UI\Form,
Nette\Utils\Strings;

final class AddIdeaForm extends Nette\Application\UI\Control {
	/** @var Nette\Database\Table\Selection $ideas */
	private $ideas;

	/** @var array $titles */
	private $titles;

	/**
	 * @param Nette\Database\Table\Selection $ideas
	 */
	public function __construct(Nette\Database\Table\Selection $ideas)
	{
		$this->ideas = clone $ideas;
		$this->titles = $ideas->fetchPairs('id', 'title');
	}

	public function render()
	{
		$this->template->setFile(__DIR__ . '/AddIdeaForm.latte');
		$this->template->render();
	}

	protected function createComponentForm()
	{
		$form = new Form;

		$form->addText('title', 'Titulek')
			->addRule(Form::FILLED, 'Titulek nápadu je nutné zadat!')
			->addRule(Form::MIN_LENGTH, 'Minimální délka jsou 4 znaky', 4)
			->addRule(Form::MAX_LENGTH, 'Maximální délka je 32 znaků', 32)
			->addRule(Form::PATTERN, 'Titulek může obsahovat jen malá a velká písmena české abecedy, číslice a mezeru.', '[\S ]*')
			->addRule(~Form::IS_IN, 'Zadaný titulek již existuje!', $this->titles);
		$form->addTextArea('description', 'Popis')
			->addRule(Form::FILLED, 'Musí být zadán popis nápadu!')
			->addRule(Form::MIN_LENGTH, 'Tento popis je příliš krátký rozšiřte jej!', 32);

		$form->addSubmit('submit', 'Založit nápad');
		$form->onSuccess[] = callback($this, 'formSubmitted');
		return $form;
	}

	/**
	 * @param Nette\Application\UI\Form $form
	 */
	public function formSubmitted(Form $form)
	{
		$values = $form->values;
		$now = new Nette\DateTime();

		$this->ideas->insert(array(
			'title' => $values['title'],
			'description' => $values['description'],
			'author' => $this->presenter->user->id,
			'date' => $now->format('Y-m-d')
		));

		$this->flashMessage('Nápad úspěšně přidán!', 'success');
		$this->presenter->redirect('this');
	}
}